/**
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package com.google.code.japidiff;

public class JavaAnnotation {

	private String desc;
	private boolean visible;
	private String name;
	private Object value;
	private JavaAnnotation[] annotations = new JavaAnnotation[0];
	private AnnotationValue[] values = new AnnotationValue[0];
	private boolean def;
	
	public static class AnnotationValue {
		private String name;
		private String desc;
		private String value;
		public AnnotationValue(String name, String desc, String value) {
			this.name = name;
			this.desc = desc;
			this.value = value;
		}
		public String getName() {
			return name;
		}
		public String getDesc() {
			return desc;
		}
		public String getValue() {
			return value;
		}
	}
	
	public JavaAnnotation() {
	}
	
	public String getDesc() {
		return desc;
	}

	public void setDesc(String desc) {
		this.desc = desc;
	}

	public boolean isVisible() {
		return visible;
	}

	public void setVisible(boolean visible) {
		this.visible = visible;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Object getValue() {
		return value;
	}

	public void setValue(Object value) {
		this.value = value;
	}

	public JavaAnnotation[] getAnnotations() {
		return annotations;
	}
	
	public AnnotationValue[] getValues() {
		return values;
	}

	public void addAnnotation(JavaAnnotation annotation) {
		JavaAnnotation[] old = annotations;
		annotations = new JavaAnnotation[old.length + 1];
		for (int i = 0; i < old.length; i++) {
			annotations[i] = old[i];
		}
		annotations[old.length] = annotation;
	}

	public void addEnum(String name, String desc, String value) {
		AnnotationValue[] old = values;
		values = new AnnotationValue[old.length + 1];
		for (int i = 0; i < old.length; i++) {
			values[i] = old[i];
		}
		values[old.length] = new AnnotationValue(name, desc, value);
	}

	public void setDefault(boolean def) {
		this.def = def;
	}

	public boolean isDefault() {
		return def;
	}

}
